home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright (c) 1983 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that this notice is preserved and that due credit is given
- * to the University of California at Berkeley. The name of the University
- * may not be used to endorse or promote products derived from this
- * software without specific prior written permission. This software
- * is provided ``as is'' without express or implied warranty.
- */
-
- #ifndef lint
- static char sccsid[] = "@(#)networkdelta.c 2.2 (Berkeley) 12/23/87";
- #endif /* not lint */
-
- #include "globals.h"
- #include <protocols/timed.h>
-
- extern int machup;
-
- /*
- * `networkdelta' selects the largest set of deltas that fall within the
- * interval RANGE, and uses them to compute the network average delta
- */
-
- long networkdelta()
- {
- int i, j, maxind, minind;
- int ext;
- int tempind;
- long tempdata;
- long x[NHOSTS];
- long average;
-
- for (i=0; i<slvcount; i++)
- x[i] = hp[i].delta;
- for (i=0; i<slvcount-1; i++) {
- tempdata = x[i];
- tempind = i;
- for (j=i+1; j<slvcount; j++) {
- if (x[j] < tempdata) {
- tempdata = x[j];
- tempind = j;
- }
- }
- x[tempind] = x[i];
- x[i] = tempdata;
- }
-
- /* this piece of code is critical: DO NOT TOUCH IT! */
- /****/
- i=0; j=1; minind=0; maxind=1;
- if (machup == 2)
- goto compute;
- do {
- if (x[j]-x[i] <= RANGE)
- j++;
- else {
- if (j > i+1)
- j--;
- if ((x[j]-x[i] <= RANGE) && (j-i >= maxind-minind)) {
- minind=i;
- maxind=j;
- }
- i++;
- if(i = j)
- j++;
- }
- } while (j < machup);
- if ((x[machup-1] - x[i] <= RANGE) && (machup-i-1 >= maxind-minind)) {
- minind=i; maxind=machup-1;
- }
- /****/
- compute:
- ext = maxind - minind + 1;
- average = 0;
- for (i=minind; i<=maxind; i++)
- average += x[i];
- average /= ext;
- return(average);
- }
-